package be.vdab.servlets;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import be.vdab.entities.Artikel;
import be.vdab.entities.Artikelgroep;
import be.vdab.entities.FoodArtikel;
import be.vdab.entities.NonFoodArtikel;
import be.vdab.services.ArtikelService;
import be.vdab.services.ArtikelgroepService;

/**
 * Servlet implementation class ArtikelToevoegenServlet
 */
@WebServlet("/artikels/toevoegen.htm")
public class ArtikelToevoegenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final String VIEW = "/WEB-INF/JSP/artikels/toevoegen.jsp";
	private static final String REDIRECT_URL = "/artikels/toegevoegd.htm";
	private ArtikelService artikelService = new ArtikelService();
	private ArtikelgroepService artikelgroepService = new ArtikelgroepService();

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("artikelgroepen", artikelgroepService.findAll());
		request.getRequestDispatcher(VIEW).forward(request, response);
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		List<String> fouten = new ArrayList<>();
		String naam = request.getParameter("naam");
		BigDecimal aankoopprijs = null;
		BigDecimal verkoopprijs = null;
		int garantie = 0;
		int houdbaarheid = 0;
		Artikel artikel = null;

		if (naam == null || naam.isEmpty()) {
			fouten.add("Naam van artikel verplicht");
		}

		try {
			aankoopprijs = new BigDecimal(request.getParameter("aankoopprijs"));
			if (aankoopprijs.compareTo(BigDecimal.ZERO) < 0) {
				fouten.add("Aankoopprijs moet een positief getal zijn");
			}
		} catch (NumberFormatException ex) {
			fouten.add("Aankoopprijs moet een getal zijn");
		}

		try {
			verkoopprijs = new BigDecimal(request.getParameter("verkoopprijs"));
			if (verkoopprijs.compareTo(BigDecimal.ZERO) < 0) {
				fouten.add("Verkoopprijs moet een positief getal zijn");
			}
		} catch (NumberFormatException ex) {
			fouten.add("Verkoopprijs moet een getal zijn");
		}

		String soort = request.getParameter("soort");
		Artikelgroep artikelgroep = null;
		String artikelgroepNr = request.getParameter("artikelgroepen");
		if (artikelgroepNr == null) {
			fouten.add("Kies een artikelgroep");
		} else {
			artikelgroep = artikelgroepService.read(Long.parseLong(artikelgroepNr));
			if (artikelgroep == null) {
				fouten.add("Artikelgroep bestaat niet");
			}
		}

		if (soort != null) {
			if (soort.equals("F")) {
				try {
					houdbaarheid = Integer.parseInt(request
							.getParameter("houdbaarheid"));
					if (houdbaarheid <= 0) {
						fouten.add("Houdbaarheid moet een positief getal zijn");
					} else {
						artikel = new FoodArtikel(naam, aankoopprijs,
								verkoopprijs, houdbaarheid, artikelgroep);
					}
				} catch (NumberFormatException ex) {
					fouten.add("Vul houdbaarheid in");
				}
			}
			if (soort.equals("NF")) {
				try {
					garantie = Integer.parseInt(request
							.getParameter("garantie"));
					if (garantie <= 0) {
						fouten.add("Garantie moet een positief getal zijn");
					} else {
						artikel = new NonFoodArtikel(naam, aankoopprijs,
								verkoopprijs, garantie, artikelgroep);
					}
				} catch (NumberFormatException ex) {
					fouten.add("Vul garantie in");
				}
			}

		} else {
			fouten.add("Duid food:non-food aan");
		}
		
		
		

		

		if (fouten.isEmpty()) {
			artikelService.create(artikel);
			response.sendRedirect(response.encodeRedirectURL(request
					.getContextPath()
					+ REDIRECT_URL
					+ "?artikelNr="
					+ artikel.getArtikelNr()));
		} else {
			request.setAttribute("artikelgroepen",
					artikelgroepService.findAll());
			request.setAttribute("fouten", fouten);
			request.getRequestDispatcher(VIEW).forward(request, response);
		}
	}

}
